package com.demo.java.OD301_350.OD324;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【数大雁(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146118617
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String user_input = scanner.nextLine();
        int ret = solveMethod(user_input);
        System.out.println(ret);
    }

    // 解决问题的核心方法
    private static int solveMethod(String quack) {
        String base = "quack";  // 大雁的叫声
        int[] states = new int[base.length()];  // 状态数组，表示每个字母的出现次数
        int counts = 0;  // 同时发出叫声的大雁数量

        // 遍历输入的叫声字符串
        for (char c : quack.toCharArray()) {
            // 如果是 'q'，增加 q 的计数
            if (c == base.charAt(0)) {
                states[0]++;
            } else {
                // 如果是其他字符，找到其在“quack”中的位置
                int index = base.indexOf(c);
                // 检查是否符合顺序
                states[index - 1]--;  // 减少前一个字符的数量
                states[index]++;  // 增加当前字符的数量
                // 如果是最后一个字符 'k'，减少 'k' 的数量
                if (c == base.charAt(base.length() - 1)) {
                    states[states.length - 1]--;
                }
            }

            // 更新最大同时发出叫声的大雁数量
            counts = Math.max(counts, sum(states));

            // 如果出现非法的叫声顺序，返回 -1
            if (containsNegative(states)) {
                return -1;
            }
        }

        // 如果最终状态不是0，说明大雁叫声不完整，返回 -1
        if (sum(states) != 0) {
            return -1;
        }
        return counts;  // 返回同时发出叫声的大雁数量
    }

    // 计算状态数组的和
    private static int sum(int[] array) {
        int sum = 0;
        for (int num : array) {
            sum += num;
        }
        return sum;
    }

    // 检查状态数组是否包含负数
    private static boolean containsNegative(int[] array) {
        for (int num : array) {
            if (num < 0) {
                return true;
            }
        }
        return false;
    }
}